/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tk.eigh.ksvg.component.gradients;

import ksvg.core.SVGComponentBase;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFComponent;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;
import tk.eigh.ksvg.component.common._ViewBoxAware;
import tk.eigh.ksvg.types.SVGCoordinate;
import tk.eigh.ksvg.types.SVGLength;

/**
 *
 * @author nt
 */
@JSFComponent(name = "svg:Pattern",
type = "tk.eigh.svg.Pattern",
family = "gradients.Pattern",
clazz = "ksvg.gradients.Pattern",
tagClass = "ksvg.tags.gradients.PatternTag",
defaultRendererType = "SVGPatternRenderer")
public abstract class AbstractPattern extends SVGComponentBase implements _ViewBoxAware {

    /**
     * patternUnits = "userSpaceOnUse | objectBoundingBox"
     *<br/>
     * Defines the coordinate system for attributes ‘x’, ‘y’, ‘width’ and
     * ‘height’. If patternUnits="userSpaceOnUse", ‘x’, ‘y’, ‘width’ and
     * ‘height’ represent values in the coordinate system that results from
     * taking the current user coordinate system in place at the time when the
     * ‘pattern’ element is referenced (i.e., the user coordinate system for the
     * element referencing the ‘pattern’ element via a ‘fill’ or ‘stroke’
     * property) and then applying the transform specified by attribute
     * ‘patternTransform’. If patternUnits="objectBoundingBox", the user
     * coordinate system for attributes ‘x’, ‘y’, ‘width’ and ‘height’ is
     * established using the bounding box of the element to which the pattern is
     * applied (see Object bounding box units) and then applying the transform
     * specified by attribute ‘patternTransform’. If attribute ‘patternUnits’ is
     * not specified, then the effect is as if a value of 'objectBoundingBox'
     * were specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract String getPatternUnits();

    /**
     * patternContentUnits = "userSpaceOnUse | objectBoundingBox"
     *<br/>
     * Defines the coordinate system for the contents of the ‘pattern’. Note
     * that this attribute has no effect if attribute ‘viewBox’ is specified. If
     * patternContentUnits="userSpaceOnUse", the user coordinate system for the
     * contents of the ‘pattern’ element is the coordinate system that results
     * from taking the current user coordinate system in place at the time when
     * the ‘pattern’ element is referenced (i.e., the user coordinate system for
     * the element referencing the ‘pattern’ element via a ‘fill’ or ‘stroke’
     * property) and then applying the transform specified by attribute
     * ‘patternTransform’. If patternContentUnits="objectBoundingBox", the user
     * coordinate system for the contents of the ‘pattern’ element is
     * established using the bounding box of the element to which the pattern is
     * applied (see Object bounding box units) and then applying the transform
     * specified by attribute ‘patternTransform’. If attribute
     * ‘patternContentUnits’ is not specified, then the effect is as if a value
     * of 'userSpaceOnUse' were specified. Animatable: yes
     */
    @JSFProperty
    public abstract String getPatternContentUnits();

    /**
     * patternTransform = "&lt;transform-list&gt;"
     *<br/>
     * Contains the definition of an optional additional transformation from the
     * pattern coordinate system onto the target coordinate system (i.e.,
     * 'userSpaceOnUse' or 'objectBoundingBox'). This allows for things such as
     * skewing the pattern tiles. This additional transformation matrix is
     * post-multiplied to (i.e., inserted to the right of) any previously
     * defined transformations, including the implicit transformation necessary
     * to convert from object bounding box units to user space. If attribute
     * ‘patternTransform’ is not specified, then the effect is as if an identity
     * transform were specified. Animatable: yes.
     */
    @JSFProperty
    public abstract String getPatternTransform();

    /**
     * x = "&lt;coordinate&gt;"
     *<br/>
     * ‘x’, ‘y’, ‘width’ and ‘height’ indicate how the pattern tiles are placed
     * and spaced. These attributes represent coordinates and values in the
     * coordinate space specified by the combination of attributes
     * ‘patternUnits’ and ‘patternTransform’. If the attribute is not specified,
     * the effect is as if a value of zero were specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract SVGCoordinate getX();

    /**
     * y = "&lt;coordinate&gt;"
     *<br/>
     * See ‘x’. If the attribute is not specified, the effect is as if a value
     * of zero were specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract SVGCoordinate getY();

    /**
     * width = "&lt;length&gt;"
     *<br/>
     * See ‘x’. A negative value is an error (see Error processing). A value of
     * zero disables rendering of the element (i.e., no paint is applied). If
     * the attribute is not specified, the effect is as if a value of zero were
     * specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract SVGLength getWidth();

    /**
     * height = "&lt;length&gt;"
     *<br/>
     * See ‘x’. A negative value is an error (see Error processing). A value of
     * zero disables rendering of the element (i.e., no paint is applied). If
     * the attribute is not specified, the effect is as if a value of zero were
     * specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract SVGLength getHeight();

    /**
     * xlink:href = "&lt;iri&gt;"
     *<br/>
     * An IRI reference to a different ‘pattern’ element within the current SVG
     * document fragment. Any attributes which are defined on the referenced
     * element which are not defined on this element are inherited by this
     * element. If this element has no children, and the referenced element does
     * (possibly due to its own ‘xlink:href’ attribute), then this element
     * inherits the children from the referenced element. Inheritance can be
     * indirect to an arbitrary level; thus, if the referenced element inherits
     * attributes or children due to its own ‘xlink:href’ attribute, then the
     * current element can inherit those attributes or children.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    public abstract String getFor();
}